package cz.pecinovsky.česky.oopnz.záloha_do_budoucna;
//Příliš žluťoučký kůň úpěl ďábelské ódy
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */


////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++

import static java.lang.Math.*;


/*******************************************************************************
 * Třída Časování obsahuje několik statickým metod, které testují
 * zrnitost údajů systémových hodin a rychlost porcesoru.
 * Metody vypisují počet milisekund uplynuvších mezi dvěma tiky hodin
 * a současně také počet běhů cyklem mezi těmito tiky.
 * Většina provádí tento test opakovaně a tak názorně demonstruje
 * nerovnoměrnou rychlost zpracování programů.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class ZrnitostHodin
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

    /***************************************************************************
     * Sloučení obou předchozích testů do jediné metody.
     */
    public static void testHodinMilis()
    {
        int pokusů = 20;
        System.out.println("===== ZAČÁTEK TESTU S VNOŘENÝM CYKLEM =====");

        long minule = System.currentTimeMillis();
        
        System.out.print( "\f" );
        for( int pokus = 1;   pokus <= pokusů;   pokus++ )
        {
            int  dotaz = 0;
            long nyní;
 
            do{
                dotaz++;
                nyní = System.currentTimeMillis();
            }while( nyní == minule );
            System.out.printf( "Pokus %2d : tik %2d ms po %,7d. čtení%n", 
                                pokus, (nyní-minule), dotaz );
            minule = nyní;
        }
        System.out.println("===== KONEC TESTU S VNOŘENÝM CYKLEM =====");
    }


    /***************************************************************************
     */
    public static void testHodinNano()
    {
         int pokusů = 20;
        System.out.println("===== ZAČÁTEK TESTU S VNOŘENÝM CYKLEM =====");

        long minule = System.currentTimeMillis();
        long system;

        for( int pokus = 1;   pokus <= pokusů;   pokus++ )
        {
            int  dotaz = 0;
            long nyní;

            do{
                dotaz++;
                system = System.currentTimeMillis();
                nyní = System.nanoTime();
            }while( nyní == minule );
            System.out.printf( "Pokus %2d : tik %,10d ns, " +
                "Přesně: %,15d ms, Nano: %,15d ns po %4.2f. čtení%n", 
                pokus, (nyní-minule), system, nyní, (double)dotaz );
            minule = nyní;
        }
        System.out.println("===== KONEC TESTU S VNOŘENÝM CYKLEM =====");
    }

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================
    private ZrnitostHodin() {}
    
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//+ main
    /***************************************************************************
     * Testovací metoda.
     * -
     * @param args Parametry příkazového řádku se nepoužívají.
     */
    public static void main(String[] args)
    {
        System.out.printf( "floor( 3.5 )  = %f\n", floor(  3.5 ) );
        System.out.printf( "ceil ( 3.5 )  = %f\n", ceil(   3.5 ) );
        System.out.printf( "floor( -3.5 ) = %f\n", floor( -3.5 ) );
        System.out.printf( "ceil ( -3.5 ) = %f\n", ceil(  -3.5 ) );
//        testHodinNano();
    }


//- main
}
